package gest;

import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.sql.Connection;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.Scanner;

public class Estat_Ut {
	static int nu = 0;
	static Registry re;
	static Gestao g;
	static Scanner sca = new Scanner(System.in);
	static Connection conn;
	static Utente ut;

	public Estat_Ut(int num, String comp) {
		if (comp == "a") {
			String q;
			q = "select Medicamentos.nome from Medicamentos, Utentes, Receitas "
					+ "where Receitas.idUt=Utentes.idUt and "
					+ "Receitas.idMedi=Medicamentos.idMedi and Utentes.nu="
					+ num
					+ " group by Receitas.idmedi "
					+ "order by count(Receitas.idmedi) desc limit 3;";
			java.sql.ResultSet rs = null;
			rs = querry(q);
			try {
				System.out.println("Medicamentos mais utilizados:");
				rs.first();
				System.out.println(rs.getString(1));
				rs.next();
				System.out.println(rs.getString(1));
				rs.next();
				System.out.println(rs.getString(1));
			} catch (SQLException e) {
				e.printStackTrace();
			}
		} else {
			String que;
			que = "select Farmacias.nome from Farmacias, Utentes, Receitas "
					+ "where Receitas.idUt=Utentes.idUt and "
					+ "Receitas.idFarm=Farmacias.idFarm and Utentes.nu=" + num
					+ " group by Receitas.idfarm "
					+ "order by count(Receitas.idfarm) desc limit 3";
			// System.out.println(que);
			java.sql.ResultSet rs = querry(que);
			try {
				System.out.println("Farmacias mais utilizadas:");
				rs.first();
				System.out.println(rs.getString(1));
				rs.next();
				System.out.println(rs.getString(1));
				rs.next();
				System.out.println(rs.getString(1));
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}

	}

	public Estat_Ut(int li, int a) {
		String ano = Integer.toString(a);
		String qu = "select count(*) from Receitas, Utentes where YEAR(Receitas.demi) = '"
				+ ano
				+ "' and Receitas.idUt=Utentes.idUt and Utentes.nu="
				+ li;
		java.sql.ResultSet rs = querry(qu);
		try {
			rs.first();
			System.out
					.println("O numero de receitas prescritas para o utente no ano em questao e':"
							+ rs.getString(1));
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	public Estat_Ut(int li, int a, int m) {
		String ano = Integer.toString(a);
		String mes = Integer.toString(m);
		String qu = "select count(*) from Receitas, Utentes where YEAR(Receitas.demi) = '"
				+ ano
				+ "' and MONTH(Receitas.demi) ='"
				+ mes
				+ "' "
				+ "and Receitas.idUt=Utentes.idUt and Utentes.nu=" + li;
		// System.out.println(qu);
		java.sql.ResultSet rs = querry(qu);
		try {
			rs.first();
			System.out
					.println("O numero de receitas prescritas para o utente no mes em questao e': "
							+ rs.getString(1));
		} catch (SQLException e) {
			e.printStackTrace();
		}

	}

	public static void main(String[] args) {
		if (args[0].equals("-i")) {
			try {
				re = LocateRegistry.getRegistry();
				g = (Gestao) re.lookup("GestaoReceitas");
			} catch (RemoteException e) {
				e.printStackTrace();
			} catch (NotBoundException e) {
				e.printStackTrace();
			}
			g = new Gestao_Impl();
			selecciona();
		} else if (args[0].equals("-mm")) {
			new Estat_Ut(Integer.parseInt(args[1]), "a");
		} else if (args[0].equals("-mf")) {
			new Estat_Ut(Integer.parseInt(args[1]), "b");
		} else if (args[0].equals("-a")) {
			new Estat_Ut(Integer.parseInt(args[1]), Integer.parseInt(args[2]));
		} else if (args[0].equals("-m")) {
			new Estat_Ut(Integer.parseInt(args[1]), Integer.parseInt(args[2]),
					Integer.parseInt(args[3]));
		} else
			System.out.println("Opcao invalida");
	}

	public static java.sql.ResultSet querry(String q) {
		if (conn == null)
			conn = DBConnection.get_conn();
		java.sql.Statement st;
		java.sql.ResultSet rs = null;
		try {
			st = conn.createStatement();
			rs = st.executeQuery(q);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;
	}

	public static void selecciona() {
		System.out.println("Insira o nu do Utente pretendido");
		nu = Integer.parseInt(sca.nextLine());
		try {
			ut = g.cria_utente(nu);
			System.out.println("O nome do utente e': " + ut.get_nome());
		} catch (RemoteException e) {
			e.printStackTrace();
		}

		System.out.println("Qual a pesquisa pretendida:\n"
				+ "1-Receitas por data\n" + "2-Medicamentos mais utilizados\n"
				+ "3-Farmacias mais utilizadas\n" + "4-sair");
		int x = Integer.parseInt(sca.nextLine());
		switch (x) {
		case 1:
			Receita_Data();
			break;
		case 2:
			Mais_medi();
			break;
		case 3:
			Mais_farm();
			break;
		case 4:
			System.exit(0);
			break;
		default:
			System.out.println("Opccao invalida!!!");
			selecciona();
			break;
		}

	}

	public static void Receita_Data() {
		String qu = null, mes = null, ano = null;
		java.sql.ResultSet rs = null;
		int x = 0;
		System.out.println("Pretende fazer a pesquisa por:\n" + "1-mes\n"
				+ "2-ano\n" + "3-sair");
		x = Integer.parseInt(sca.nextLine());
		switch (x) {
		case 1:
			System.out.println("Insira o mes pretendido (mm)");
			mes = sca.nextLine();
			System.out.println("Insira o ano pretendido (yyyy)");
			ano = sca.nextLine();
			qu = "select count(*) from Receitas, Utentes where YEAR(Receitas.demi) = '"
					+ ano
					+ "' and MONTH(Receitas.demi) ='"
					+ mes
					+ "' "
					+ "and Receitas.idUt=Utentes.idUt and Utentes.nu=" + nu;
			// System.out.println(qu);
			rs = querry(qu);
			try {
				rs.first();
				System.out
						.println("O numero de receitas prescritas para o utente no mes em questao e': "
								+ rs.getString(1));
			} catch (SQLException e) {
				e.printStackTrace();
			}
			System.out.println("Deseja fazer outra pesquisa?\n" + "1-Sim\n"
					+ "2-Nao\n");
			int res2 = Integer.parseInt(sca.nextLine());
			switch (res2) {
			case 1:
				selecciona();
				break;
			case 2:
				System.exit(0);
				break;
			}
			break;
		case 2:
			System.out.println("Insira o ano pretendido (yyyy)");
			ano = sca.nextLine();
			qu = "select count(*) from Receitas, Utentes where YEAR(Receitas.demi) = '"
					+ ano
					+ "' and Receitas.idUt=Utentes.idUt and Utentes.nu="
					+ nu;
			rs = querry(qu);
			try {
				rs.first();
				System.out
						.println("O numero de receitas prescritas para o utente no ano em questao e':"
								+ rs.getString(1));
			} catch (SQLException e) {
				e.printStackTrace();
			}
			System.out.println("Deseja fazer outra pesquisa?\n" + "1-Sim\n"
					+ "2-Nao\n");
			int res3 = Integer.parseInt(sca.nextLine());
			switch (res3) {
			case 1:
				selecciona();
				break;
			case 2:
				System.exit(0);
				break;
			}
			break;
		case 3:
			System.exit(0);
		default:
			System.out.println("Opccao invalida!!!");
			Receita_Data();
			break;
		}
	}

	public static void Mais_medi() {
		String q;
		q = "select Medicamentos.nome from Medicamentos, Utentes, Receitas "
				+ "where Receitas.idUt=Utentes.idUt and "
				+ "Receitas.idMedi=Medicamentos.idMedi and Utentes.nu=" + nu
				+ " group by Receitas.idmedi "
				+ "order by count(Receitas.idmedi) desc limit 3;";
		java.sql.ResultSet rs = null;
		rs = querry(q);
		try {
			System.out.println("Medicamentos mais utilizados:");
			rs.first();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
			selecciona();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		System.out.println("Deseja fazer outra pesquisa?\n" + "1-Sim\n"
				+ "2-Nao\n");
		int res2 = Integer.parseInt(sca.nextLine());
		switch (res2) {
		case 1:
			selecciona();
			break;
		case 2:
			System.exit(0);
			break;
		}
	}

	public static void Mais_farm() {
		String que;
		que = "select Farmacias.nome from Farmacias, Utentes, Receitas "
				+ "where Receitas.idUt=Utentes.idUt and "
				+ "Receitas.idFarm=Farmacias.idFarm and Utentes.nu=" + nu
				+ " group by Receitas.idfarm "
				+ "order by count(Receitas.idfarm) desc limit 3";
		// System.out.println(que);
		java.sql.ResultSet rs = querry(que);
		try {
			System.out.println("Farmacias mais utilizadas:");
			rs.first();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
			rs.next();
			System.out.println(rs.getString(1));
			selecciona();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		System.out.println("Deseja fazer outra pesquisa?\n" + "1-Sim\n"
				+ "2-Nao\n");
		int res2 = Integer.parseInt(sca.nextLine());
		switch (res2) {
		case 1:
			selecciona();
			break;
		case 2:
			System.exit(0);
			break;
		}
	}
}
